from collections.abc import Iterable


# class Foo(object):
#     def __next__(self):
#         return 1


class Demo(object):
    def __init__(self, x):
        self.x = x
        self.count = 0

    def __iter__(self):  # 只要重写了__iter__方法，这个类创建的object就是可迭代对象
        return self

    # return Foo()

    def __next__(self):
        # 每一次for in循环都会调用一次__next__方法，获取其返回值
        self.count += 1
        if self.count <= self.x:
            return self.count - 1
        else:
            raise StopIteration  # 让迭代器停止


d = Demo(10)
print(isinstance(d, Iterable))
# for...in 循环的本质是调用可迭代对象的__iter__方法，获取这个方法的返回值
# 这个返回值是一个object，然后在调用这个object的__next__方法
for x in d:
    print(x)

# for x in range(10):
#     print(x)


d = Demo(6)
# 1.
i = d.__iter__()
print(i.__next__())
# 2.
i = iter(d)  # 内置函数iter：获取可迭代对象的迭代器
print(next(i))

